package com.buaa.shortytall.network;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import com.buaa.shortytall.MyHealth;
public abstract class AbstractNetWorkThread extends Thread{
//相应时间
private final static int TIMEOUT = 6000;
private String mUrl = null;
private static DefaultHttpClient mHttpClient = null;
public DefaultHttpClient getInstance(){
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
return mHttpClient;
}
public abstract String getRequestUrl();
public void setUrl() {
mUrl = getRequestUrl();
}
protected String executePost(List<BasicNameValuePair> pairs) throws ClientProtocolException, IOException{
setUrl();
if(mUrl == null){
return null;
}
HttpPost httpPost = new HttpPost(mUrl);
httpPost.setEntity(new UrlEncodedFormEntity(pairs,HTTP.UTF_8));
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setSoTimeout(params, TIMEOUT);
HttpConnectionParams.setConnectionTimeout(params, TIMEOUT);
HttpClientParams.setRedirecting(params, false);
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
mHttpClient.setParams(params);
DefaultCoookieStore cookieStore = DefaultCoookieStore.getInstance(MyHealth.getCurrentContext());
mHttpClient.setCookieStore(cookieStore);
HttpResponse response = mHttpClient.execute(httpPost);
cookieStore.saveCookies(MyHealth.getCurrentContext());
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 200){
return EntityUtils.toString(response.getEntity());
}
return null;
}
protected String executeMultipartPost(Bitmap bitmap,String filename ,List<BasicNameValuePair> pairs){
setUrl();
if(mUrl == null){
return null;
}
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 75, bos);
byte[] data = bos.toByteArray();
HttpPost mHttpPost = new HttpPost(mUrl);
mHttpPost.setEntity(new UrlEncodedFormEntity(pairs,HTTP.UTF_8));
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setSoTimeout(params, TIMEOUT);
HttpConnectionParams.setConnectionTimeout(params, TIMEOUT);
HttpClientParams.setRedirecting(params, false);
if(mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
mHttpClient.setParams(params);
ByteArrayBody bab = new ByteArrayBody(data, filename);
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("photo", bab);
for(BasicNameValuePair item : pairs){
reqEntity.addPart(item.getName(), new StringBody(item.getValue()));
}
mHttpPost.setEntity(reqEntity);
HttpResponse response = mHttpClient.execute(mHttpPost);
int statusCode = response.getStatusLine().getStatusCode();
if(statusCode == 200){
return EntityUtils.toString(response.getEntity());
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected String executeGet() throws ClientProtocolException, IOException{
setUrl();
if(mUrl == null)
return null;
HttpParams params = new BasicHttpParams();
HttpConnectionParams.setSoTimeout(params, TIMEOUT);
HttpConnectionParams.setConnectionTimeout(params, TIMEOUT);
HttpClientParams.setRedirecting(params, true);
if (mHttpClient == null){
mHttpClient = new DefaultHttpClient();
}
mHttpClient.setParams(params);
// DefaultCoookieStore cookieStore = DefaultCoookieStore.getInstance(MyHealth.getCurrentContext());
// mHttpClient.setCookieStore(cookieStore);
HttpGet get = new HttpGet(mUrl);
HttpResponse response = mHttpClient.execute(get);
// cookieStore.saveCookies(MyHealth.getCurrentContext());
int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 200) {
return EntityUtils.toString(response.getEntity(), "UTF-8");
}
return null;
}
}